﻿// -------------------------------------------------------------------------
//    @FileName         :    NFProxyClientModule.h
//    @Author           :    Gao.Yi
//    @Date             :   2022-09-18
//    @Email			:    445267987@qq.com
//    @Module           :    NFProxyClientModule
//
// -------------------------------------------------------------------------

#pragma once

#include "NFComm/NFCore/NFCommMapEx.hpp"
#include "NFLogicCommon/NFMMODynamicModule.h"

class NFProxySession;

class NFCProxyPlayerModule : public NFMMODynamicModule
{
public:
	explicit NFCProxyPlayerModule(NFIPluginManager* p);

	virtual ~NFCProxyPlayerModule();

	virtual int Awake() override;

	virtual int Init() override;

	virtual int Tick() override;

	virtual int OnDynamicPlugin() override;

	virtual int OnTimer(uint32_t nTimerId) override;

	/**
	 * @brief 处理客户端消息
	 * @param unLinkId
	 * @param packet
	 * @return
	 */
	virtual int OnHandleClientMessage(uint64_t unLinkId, NFDataPackage& packet) override;

	/**
	 * @brief 处理来自服务器的信息
	 * @param unLinkId
	 * @param packet
	 * @return
	 */
	virtual int OnHandleServerMessage(uint64_t unLinkId, NFDataPackage& packet) override;

public:
	/*
	    处理客户端链接事件和未注册消息
	*/
	int OnProxyClientSocketEvent(eMsgType nEvent, uint64_t unLinkId);

	int OnHandleProxyClientOtherMessage(uint64_t unLinkId, NFDataPackage& packet);

	int OnHandleClientDisconnect(uint64_t unLinkId);

public:
	/**
	 * @brief 处理其他服务器发给客户的 信息
	 * @param unLinkId
	 * @param packet
	 * @return
	 */
	int OnHandleOtherServerToClientMsg(uint64_t unLinkId, NFDataPackage& packet);

public:
	int OnHandleRedirectMsg(uint64_t unLinkId, NFDataPackage& packet);

public:
	/**
	 * 处理认证同步请求
	 *
	 * 当收到认证同步请求时，调用该函数进行处理此函数的主要目的是根据提供的链接ID和数据包，
	 * 完成与客户端之间的认证信息同步过程认证同步是建立正常通信前的重要步骤，它确保了后续
	 * 通信的安全性和可靠性
	 *
	 * @param unLinkId 链接ID，用于标识特定的通信链接
	 * @param packet 接收到的数据包，包含认证所需的信息
	 * @return 返回处理结果，具体含义根据实际情况定义
	 */
	int OnHandleAuthSyn(uint64_t unLinkId, NFDataPackage& packet);

	/**
	 * 处理认证确认事件
	 *
	 * 当收到认证确认消息时，调用此函数进行相应处理。该函数主要用于处理与认证相关的逻辑，
	 * 包括但不限于认证结果的处理、认证状态的更新等。
	 *
	 * @param unLinkId 链接ID，用于标识特定的链接
	 * @param packet 认证确认消息的数据包，包含认证结果及相关信息
	 * @return 返回处理结果，具体的返回值含义根据实际情况定义
	 */
	int OnHandleAuthAck(uint64_t unLinkId, NFDataPackage& packet);

	int OnHandleTransferToServer(uint64_t unLinkId, NFDataPackage& packet);

	int OnHandleSessionStop(uint64_t unLinkId, NFDataPackage& packet);

	int OnHandleTransferToClient(uint64_t unLinkId, NFDataPackage& packet);

    int OnHandleMultiCastToClient(uint64_t unLinkId, NFDataPackage& packet);

    int OnHandleBroadCastToClient(uint64_t unLinkId, NFDataPackage& packet);

    int OnHandleSetRouting(uint64_t unLinkId, NFDataPackage& packet);
public:
	NFCommMapEx<uint64_t, NFProxySession> m_proxySessionMap;
	NFBuffer m_sendBuffer;
};
